#ifndef ZL_STRING
#define ZL_STRING
#include <string>
#include "Basic.h"

namespace zl
{
	
	extern zint					    atoi(const std::string& string);
	extern zint					    wtoi(const std::wstring& string);
#ifdef _MSC_VER
	extern __int64				    atoi64(const std::string& string);
	extern __int64				    wtoi64(const std::wstring& string);
#else
	extern long long			    atoi64(const std::string& string);
	extern long long			    wtoi64(const std::wstring& string);
#endif
	extern zuint				    atou(const std::string& string);
	extern zuint				    wtou(const std::wstring& string);
#ifdef _MSC_VER
	extern unsigned __int64		    atou64(const std::string& string);
	extern unsigned __int64		    wtou64(const std::wstring& string);
#else
	extern unsigned long long       atou64(const std::string& string);
	extern unsigned long long	    wtou64(const std::wstring& string);
#endif
	extern double				    atof(const std::string& string);
	extern double				    wtof(const std::wstring& string);

	extern std::string				itoa(zint number);
	extern std::wstring				itow(zint number);
#ifdef _MSC_VER
	extern std::string   		    i64toa(__int64 number);
	extern std::wstring			    i64tow(__int64 number);
#else
	extern std::string   		    i64toa(long long number);
	extern std::wstring			    i64tow(long long number);
#endif
	extern std::string				utoa(zuint number);
	extern std::wstring				utow(zuint number);
#ifdef _MSC_VER
	extern std::string				u64toa(unsigned __int64 number);
	extern std::wstring				u64tow(unsigned __int64 number);
#else 
	extern std::string				u64toa(unsigned long long number);
	extern std::wstring				u64tow(unsigned long long number);
#endif
	extern std::string				ftoa(double number);
	extern std::wstring				ftow(double number);

	extern zint					    _wtoa(const wchar_t* w, char* a, zint chars);
	extern std::string				wtoa(const std::wstring& string);
	extern zint					    _atow(const char* a, wchar_t* w, zint chars);
	extern std::wstring				atow(const std::string& string);
	extern std::string				alower(const std::string& string);
	extern std::wstring				wlower(const std::wstring& string);
	extern std::string				aupper(const std::string& string);
	extern std::wstring				wupper(const std::wstring& string);
};

#endif